package fracao;

public class Fracao {

	public final int numerador;
	public final int denominador;

	public Fracao(int numerador, int denominador) throws ZeroException {
		
		if(denominador==0) throw new ZeroException();
		
		int mdc = mdc(numerador, denominador);
	
		this.numerador = numerador / mdc;
		this.denominador = denominador / mdc;
	}

	public static int mdc(int dividendo, int divisor) {
		int menor = Math.min(dividendo, divisor);
		while (menor > 1) {
			int resto1 = dividendo % menor;
			int resto2 = divisor % menor;
			if (resto1 == 0 && resto2 == 0) {
				return menor;
			}
			menor--;
		}
		return 1;
	}

	public Fracao soma(Fracao f) {

		int denominador = f.denominador;

		if (this.denominador != f.denominador) {
			denominador = this.denominador * f.denominador;
		}

		int numerador = ((denominador / this.denominador) * this.numerador)
				+ ((denominador / f.denominador) * f.numerador);

		return new Fracao(numerador, denominador);
	}

	public Fracao subtrai(Fracao f) {

		int denominador = this.denominador * f.denominador;

		int numerador = ((denominador / this.denominador) * this.numerador)
				- ((denominador / f.denominador) * f.numerador);

		return new Fracao(numerador, denominador);
	}

	public Fracao multiplica(Fracao f2) {

		return new Fracao((this.numerador * f2.numerador),
				(this.denominador * f2.denominador));
	}

	public Fracao divide(Fracao f2) {
		return new Fracao(this.numerador * f2.denominador, this.denominador
				* f2.numerador);
	}

	public double resultado() {
		return (double) this.numerador/ (double) this.denominador;
		
		
	}
	
	

}
